As more organizations adopt cloud computing for developing and deploying applications on outsourced infrastructure, a new set of capabilities and challenges have emerged. While cloud computing promises seemingly elastic capacity and scaling, certain present architectural limitations in cloud platforms limit the seamless transition of applications to clouds (e.g., state management and fault tolerance in the stacks of different Platform-as-a-Service (PaaS) clouds). Many cloud deployments are limited to stateless applications and compute or data driven batch-oriented services, such as printing and e-mail, hosting of web servers and simple parallel batch processing services such as image processing. Porting and managing applications with states is more difficult because applications with states are dependent on capturing, propagating and maintaining user session states in global application and/or transactional contexts, and failure of any of the nodes along the transactional path affect the global state of the application.
Preserving individual the user session state is important in enterprise class applications where one of the concerns is to provide a stable user experience and maintain the application state even if the application goes down. In a PaaS environment, a user has little or no access and control over the server platform and session management layer. Additionally, the platform tiers are generally loosely coupled and service-oriented. These make traditional session-state management techniques non-usable. PaaS platforms typically perform mapping and routing a user request to the service end-point of the appropriate execution container and load balancing across execution containers. However, these platforms may not provide customized application level load balancing, nor may these platforms implement user session management for specific application instances hosted in a container.
Adoption of PaaS cloud services for enterprise applications has mostly been confined to edge services of a software system, such as single instance simple e-commerce applications, office productivity suites (directory services, printing, and e-mail), and other scalable stateless services like cache-based lookups, and content serving. Core enterprise services, such as persistence and communication heavy processes, critical concurrent transaction processing applications, and business process management services are not typically run on public PaaS clouds. Current PaaS platforms, in general, do not support state management through clustering, hardware fault tolerance or other means. Platforms like Microsoft® Azure have recently added a distributed cache which assists storing and retrieving the state by a service. Platforms like RedHat's® OpenShift have Java application server (JBoss) clustering support. However many emerging PaaS platforms like VMware's® CloudFoundry, Elastic Bean-Stalk from Amazon® Web Services, Heroku from SalesForce.com®, Engine Yard, and Jelastic still do not appear to have a readymade solution for properly implemented PaaS cloud services. These platforms provide very limited support for configuring the platform (e.g., the application server), and thus approaches such as application server clustering cannot be achieved as such. Further, there are many new PaaS platforms emerging almost every month and thus the set of possible deployment targets for applications is ever expanding.
Traditional approaches unfortunately may not work well in the context of cloud computing. Cloud architecture is typified by low-cost commodity infrastructure (hardware and links) with higher node failure propensity, horizontal scaling (scale-out) of services, loosely coupled components and asynchronous communication across these components. Cloud architecture traditionally allows scaling in a stateless manner and failures of components must be confined within a node. Although in case of Infrastructure-as-a-Service (IaaS) clouds, an organization may deploy the organization's own virtual machines with the requisite cluster management aware stacks the IaaS approach is in direct contrast to the very notion of elasticity and horizontal scalability. In case of Platform-as-a-Service (PaaS) cloud providers, traditional modes for achieving state management may not be employed, because PaaS providers typically do not allow the infrastructure (such as web or application servers) configuration to be tweaked. For example, PaaS providers cannot create direct connections from application containers to databases to enable container managed state persistence, or change local cache size to allow local buffering and management of session states. Moreover, the PaaS providers by themselves do not generally support clustering.